#define _CRT_SECURE_NO_WARNINGS
#include "head.h"
//void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
//    int end1 = m - 1, end2 = n - 1, target = n + m - 1;
//    while (end1 >= 0 && end2 >= 0)
//    {
//        if (nums1[end1] > nums2[end2])
//        {
//            nums1[target--] = nums1[end1--];
//        }
//        else
//        {
//            nums1[target--] = nums2[end2--];
//        }
//    }
//    while (end1 >= 0)
//    {
//        nums1[target--] = nums1[end1--];
//    }
//    while (end2 >= 0)
//    {
//        nums1[target--] = nums2[end2--];
//    }
//
//}
///**
// * Note: The returned array must be malloced, assume caller calls free().
// */
//int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
//    *returnSize = 2;
//    int* tmp = (int*)malloc(sizeof(int) * 2);
//    if (tmp == NULL)
//    {
//        perror("malloc fail");
//        exit(-1);
//    }
//    for (int i = 0; i < numsSize; i++)
//    {
//        for (int j = i + 1; j < numsSize; j++)
//        {
//            if (nums[i] + nums[j] == target)
//            {
//                tmp[0] = i;
//                tmp[1] = j;
//                return tmp;
//            }
//        }
//    }
//    return NULL;
//}
//int FirstNotRepeatingChar(char* str) {
//    // write code here
//    int a[128] = { 0 };
//    int t = 0;
//    for (int i = 0; *(str + i) != '\0'; i++)
//    {
//        t = *(str + i);
//        a[t]++;
//    }
//    for (int i = 0; *(str + i) != '\0'; i++)
//    {
//        t = *(str + i);
//        if (a[t] == 1)
//            return i;
//    }
//
//    return -1;
//}
//#include "head.h"
//void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
//    int end1 = m - 1, end2 = n - 1, target = n + m - 1;
//    while (end1 >= 0 && end2 >= 0)
//    {
//        if (nums1[end1] > nums2[end2])
//        {
//            nums1[target--] = nums1[end1--];
//        }
//        else
//        {
//            nums1[target--] = nums2[end2--];
//        }
//    }
//    while (end1 >= 0)
//    {
//        nums1[target--] = nums1[end1--];
//    }
//    while (end2 >= 0)
//    {
//        nums1[target--] = nums2[end2--];
//    }
//
//}
///**
// * Note: The returned array must be malloced, assume caller calls free().
// */
//int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
//    *returnSize = 2;
//    int* tmp = (int*)malloc(sizeof(int) * 2);
//    if (tmp == NULL)
//    {
//        perror("malloc fail");
//        exit(-1);
//    }
//    for (int i = 0; i < numsSize; i++)
//    {
//        for (int j = i + 1; j < numsSize; j++)
//        {
//            if (nums[i] + nums[j] == target)
//            {
//                tmp[0] = i;
//                tmp[1] = j;
//                return tmp;
//            }
//        }
//    }
//    return NULL;
//}
//int FirstNotRepeatingChar(char* str) {
//    // write code here
//    int a[128] = { 0 };
//    int t = 0;
//    for (int i = 0; *(str + i) != '\0'; i++)
//    {
//        t = *(str + i);
//        a[t]++;
//    }
//    for (int i = 0; *(str + i) != '\0'; i++)
//    {
//        t = *(str + i);
//        if (a[t] == 1)
//            return i;
//    }
//
//    return -1;
//}
//int cmp(const void* a1, const void* b1)
//{
//    int a = *(int*)a1, b = *(int*)b1;
//    return a - b;
//}
//int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
//    qsort(nums1, nums1Size, sizeof(int), cmp);
//    qsort(nums2, nums2Size, sizeof(int), cmp);
//
//    int min = nums1Size > nums2Size ? nums2Size : nums1Size;
//    int* tmp = (int*)malloc(sizeof(int) * min);
//    if (tmp == NULL)
//    {
//        perror("58");
//        exit(-1);
//    }
//    int head1 = 0, head2 = 0, head = 0;
//    while (head1 <= nums1Size && head2 <= nums2Size)
//    {
//        if (nums2[head2] == nums1[head1])
//        {
//            tmp[head++] = nums2[head2++];
//            head1++;
//        }
//        else
//        {
//            head2++;
//        }
//        if (head1 == nums1Size)
//        {
//            break;
//        }
//        else if (head2 == nums2Size)
//        {
//            head2 = 0;
//            head1++;
//        }
//    }
//    *returnSize = head + 1;
//    return tmp;
//}
//void compare(int* nums1, int* nums2, int* head, int* head1, int* head2, int* nums1Size, int* nums2Size, int* tmp)
//{
//    while ((*head1) < (*nums1Size) && (*head2) < (*nums2Size))
//    {
//        if (nums1[*head1] == nums2[*head2])
//        {
//            tmp[(*head)++] = nums1[(*head1)++];
//            (*head2)++;
//        }
//        else {
//            (*head2)++;
//        }
//    }
//}
//int* intersect(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
//    int min = nums1Size > nums2Size ? nums2Size : nums1Size;
//    int* tmp = (int*)malloc(sizeof(int) * min);
//    int head1 = 0, head2 = 0, head = 0;
//    if (head1 < nums1Size && head2 < nums2Size)
//    {
//        compare(nums1, nums2, &head, &head1, &head2, &nums1Size, &nums2Size, tmp);
//    }
//    if (head2 == nums2Size)
//    {
//        head2 = 0; 
//        if (head1 == nums1Size)
//        {
//            *returnSize = head;
//            return tmp;;
//        }
//        compare(nums1, nums2, &head, &head1, &head2, &nums1Size, &nums2Size, tmp);
//    }
//    *returnSize = head;
//    return tmp;
//}
//int main()
//{
//    int nums1[] = { 1,2 };
//    int nums2[] = { 2,1 };
//    int* returnSize = (int*)malloc(sizeof(int) * 100);
//    if (returnSize == NULL)
//    {
//        perror("55");
//        exit(-1);
//    }
//     int nums1Size = sizeof(nums1) / sizeof(int);
//     int nums2Size = sizeof(nums2) / sizeof(int);
//     intersect(nums1, nums1Size, nums2, nums2Size, returnSize);
//    return 0;
//}